﻿using Acaweb.Data.Contracts;
using Acaweb.Model.Entities;
using Acaweb.Model.Entities.DatosCompuestos;
using Acaweb.Componentes.Contracts;
using System.Collections.Generic;
using System.Linq;

namespace Acaweb.Componentes
{
    public class TiposFormulariosService : BaseService, ITiposFormulariosService
    {
        ITiposFormulariosDao _TiposFormulariosDao;
        ICamposFormulariosDao _CamposFormulariosDao;
        ISuscritosDao _SuscritosDao;
        IValoresFormulariosDao _ValoresFormulariosDao;

        public IValoresFormulariosDao ValoresFormulariosDao
        {
            get { return _ValoresFormulariosDao; }
            set { _ValoresFormulariosDao = value; }
        }

        public ISuscritosDao SuscritosDao
        {
            get { return _SuscritosDao; }
            set { _SuscritosDao = value; }
        }

        public ICamposFormulariosDao CamposFormulariosDao
        {
            get { return _CamposFormulariosDao; }
            set { _CamposFormulariosDao = value; }
        }


        public ITiposFormulariosDao TiposFormulariosDao
        {
            get { return _TiposFormulariosDao; }
            set { _TiposFormulariosDao = value; }
        }

        public IList<TiposFormularios> GetAll()
        {
            List<TiposFormularios> Lista = TiposFormulariosDao.GetAll().ToList();
            Lista.ForEach(t => t.CamposFormularios = CamposFormulariosDao.GetByTipoFormulario(t.IdFormulario).ToList());

            return Lista;
        }

        public void SaveForm(Suscritos Formulario)
        {
            SuscritosDao.Save(Formulario);

            int Id = Formulario.IdSuscrito;

            //int Id = SuscritosDao.GetAll().ToList().Last().IdSuscrito;
            Formulario.Respuestas.ForEach(t => t.IdSuscrito = Id);
            Formulario.Respuestas.ForEach(t => ValoresFormulariosDao.Save(t));
        }

        public void Create(TiposFormularios TipoFormulario)
        {
            TiposFormulariosDao.Save(TipoFormulario);
        }

        public TiposFormularios GetById(int Id)
        {
            TiposFormularios Tipo = TiposFormulariosDao.GetById(Id);
            IList<CamposFormulario> CamposFormularios = CamposFormulariosDao.GetByTipoFormulario(Id).ToList().OrderBy(t=>t.Id).ToList();

            if (CamposFormularios.Count > 0)
                Tipo.CamposFormularios = CamposFormularios.ToList();

            return Tipo;
        }
    }
}